package com.aperture_software.glados_wiki.webmvc.controllers;
import com.aperture_software.glados_wiki.entities.PageContent;
import com.aperture_software.glados_wiki.entities.functions.TeeConsumeFunction;
import com.aperture_software.glados_wiki.entities.functions.page_content.EmptyPageContentFunction;
import com.aperture_software.glados_wiki.entities.functions.page_content.PageContentReadablePredicate;
import com.aperture_software.glados_wiki.entities.functions.page_content.PageContentToPageContentResponseFunction;
import com.aperture_software.glados_wiki.entities.page_content.PageContentResponse;
import com.aperture_software.glados_wiki.entities.page_content.PageContentVersionsResponse;
import com.aperture_software.glados_wiki.services.PageAclService;
import com.aperture_software.glados_wiki.services.PageContentService;
import com.aperture_software.glados_wiki.support.Pagination;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.inject.Inject;
import java.util.List;
/**
* Created by jhyun on 14. 3. 12.
*/
@RequestMapping("/recents")
@Controller
public class RecentsController {
@Inject
private PageContentService pageContentService;
@Inject
private PageAclService pageAclService;
@ResponseBody
@RequestMapping(value = "/listRecents", produces = MediaType.APPLICATION_JSON_VALUE)
public PageContentVersionsResponse listRecents(
@RequestParam(value = "offset", defaultValue = "0", required = false) final int offset,
@RequestParam(value = "limit", defaultValue = "10", required = false) final int limit) {
//
Pair<Long, List<PageContent>> p = pageContentService.listRecents(offset, limit);
Long tot = p.getLeft();
Pagination pagination = new Pagination(tot, offset, limit);
TeeConsumeFunction<PageContent, PageContentResponse> f = new TeeConsumeFunction<PageContent, PageContentResponse>(
new PageContentReadablePredicate(pageAclService),
new PageContentToPageContentResponseFunction(),
new EmptyPageContentFunction());
List<PageContentResponse> l2 = Lists.transform(p.getRight(), f);
//
return new PageContentVersionsResponse(pagination, l2);
}
}